package job3;
//火车票类，这里因为使用了合成复用原则，所以不需要分别在不同的线程中分别再加锁，加锁需要使用同一把锁。
//但这也导致SaleThread和SaleRunnable代码和相似，且简单。
public class TrainTickets {
//    记录票的数量
    private int number;
    public TrainTickets(int number) {
        this.number = number;
    }
//    卖票的实现方式
//    如果卖票成功，则返回true，否则无票可卖，返回false
//    saleName 为卖票员姓名,当然也可使用线程id等
    public synchronized boolean sellTickets(String saleName) {
        if (number > 0) {
            System.out.println(saleName + "正在售卖火车票，卖完此张还剩" + (number - 1) + "张");
            number--;
            return true;
        } else {
            System.out.println(saleName + "发现已经没有了火车票，卖票结束");
            return false;
        }
    }
}
